home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
- <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
- <?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
- <!-- English Revision: 1.8.2.10 -->
-
- <!--
- Copyright 2003-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
- <modulesynopsis metafile="worker.xml.meta">
- <name>worker</name>
- <description>Multi-Processing-Modul, das einen Hybrid-Webserver mit
- Multi-Thread und Multi-Prozess-Unterstützung implementiert</description>
- <status>MPM</status>
- <sourcefile>worker.c</sourcefile>
- <identifier>mpm_worker_module</identifier>
-
- <summary>
- <p>Dieses Multi-Processing-Modul (MPM) implementiert einen Hybrid-Server
- mit Multi-Thread und Multi-Prozess-Unterstützung. Durch die Verwendung
- von Threads für die Bedienung von Anfragen ist er in der Lage,
- eine große Anzahl von Anfragen mit weniger Systemressourcen als
- ein Prozess-basierter Server zu bedienen. Er behält jedoch viel von
- der Stabilität eines Prozess-basierten Servers bei, indem er
- mehrere Prozesse verfügbar hält, jeden mit etlichen Threads.</p>
-
- <p>Die wichtigsten Direktiven zur Steuerung des MPMs sind <directive
- module="mpm_common">ThreadsPerChild</directive>, welche die Anzahl
- der Threads beeinflusst, die von jedem Kindprozess verwendet werden, und
- <directive module="mpm_common">MaxClients</directive>, welche die
- maximale Gesamtzahl an Threads regelt, die gestartet werden
- können.</p>
- </summary>
- <seealso><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
- und Ports</a></seealso>
-
- <section id="how-it-works"><title>Arbeitsweise</title>
- <p>Ein einzelner Steuerprozess (der Elternprozess) ist für den
- Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
- feste Anzahl von Server-Threads, wie durch die <directive
- module="mpm_common">ThreadsPerChild</directive>-Direktive
- angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
- diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
- eintreffen.</p>
-
- <p>Der Apache versucht immer, einen Vorrat von <dfn>freien</dfn> oder
- unbeschäftigten Threads zu verwalten, die zur Bedienung
- hereinkommender Anfragen bereit stehen. Auf diese Weise brauchen
- Clients nicht auf die Erstellung eines neuen Threads oder Prozesses
- zu warten, bevor ihre Anfrage bedient werden kann. Die Anzahl der
- Prozesse, die anfangs gestartet wird, wird mit der Direktive
- <directive module="mpm_common">StartServers</directive> festgelegt.
- Dann, während des Betriebes, berechnet der Apache die Gesamtzahl
- der unbeschäftigten Threads und forkt oder beendet Prozesse, um diese
- Anzahl innerhalb der durch <directive
- module="mpm_common">MinSpareThreads</directive> und <directive
- module="mpm_common">MaxSpareThreads</directive> angegebenen Grenzen
- zu halten. Da dieser Prozess sehr selbstregulierend ist, ist es nur selten
- notwendig, die Voreinstellung dieser Direktiven zu ändern. Die
- maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
- die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
- Direktive <directive module="mpm_common">MaxClients</directive>
- festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
- <directive module="mpm_common">MaxClients</directive> dividiert durch
- <directive module="mpm_common">ThreadsPerChild</directive>.</p>
-
- <p>Zwei Direktiven legen harte Limits für die Anzahl der aktiven
- Kindprozesse fest und können nur geändert werden, indem der Server
- komplett gestoppt und dann wieder neu gestartet wird. <directive
- module="mpm_common">ServerLimit</directive> stellt die obere Grenze für
- die Anzahl der aktiven Kindprozesse dar und muss größer oder
- gleich dem Quotienten aus <directive
- module="mpm_common">MaxClients</directive> und <directive
- module="mpm_common">ThreadsPerChild</directive> sein. <directive
- module="mpm_common">ThreadLimit</directive> ist die obere Grenze für
- die Anzahl der Server-Threads und muss größer oder gleich
- <directive module="mpm_common">ThreadsPerChild</directive> sein. Sofern für
- diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
- allen anderen <module>worker</module>-Direktiven platziert werden.</p>
-
- <p>Neben den normalen aktiven Kindprozessen gibt es möglicherweise noch
- zusätzliche Kindprozesse, welche gerade beendet werden, wo allerdings
- zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
- Obwohl die tatsächlich zu erwartende Anzahl deutlich kleiner ist,
- können bis zu <directive module="mpm_common">MaxClients</directive>
- solcher Prozesse auftreten. Dieses Verhalten können Sie vermeiden,
- indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:</p>
-
- <ul>
- <li>setzen Sie den Wert von <directive module="mpm_common"
- >MaxRequestsPerChild</directive> auf Null</li>
-
- <li>setzen Sie den Wert von <directive module="mpm_common"
- >MaxSpareThreads</directive> auf den gleichen Wert wie <directive
- module="mpm_common">MaxClients</directive></li>
- </ul>
-
- <p>Eine typische Konfiguration der Prozess-Thread-Steuerung für
- das MPM <module>worker</module> könnte wie folgt aussehen:</p>
-
- <example>
- ServerLimit 16<br />
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25
- </example>
-
- <p>Während der Elternprozess unter Unix normalerweise als
- <code>root</code> gestartet wird, um sich an Port 80 binden zu können,
- werden die Kindprozesse und Threads unter einem weniger privilegierten
- Benutzer gestartet. Die Direktiven <directive
- module="mpm_common">User</directive> und <directive
- module="mpm_common">Group</directive> werden dazu verwendet, die
- Privilegien der Apache-Kindprozesse festzulegen. Die Kindprozesse
- müssen in der Lage sein, alle Inhalte zu lesen, die sie ausliefern
- sollen, sollten darüber hinaus jedoch so wenig wie möglich Rechte
- besitzen. Zusätzlich, solange nicht <a
- href="../suexec.html">suexec</a> verwendet wird, legen diese
- Direktiven auch die Privilegien fest, die von CGI-Skripts
- geerbt werden.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- bestimmt, wie häufig der Server Prozesse erneuert, indem er alte
- beendet und neue startet.</p>
- </section>
-
- <directivesynopsis location="mpm_common"><name>AcceptMutex</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>Group</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>PidFile</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>Listen</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ListenBacklog</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>LockFile</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxClients</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxMemFree</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>SendBufferSize</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ServerLimit</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>StartServers</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ThreadLimit</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>User</name>
- </directivesynopsis>
-
- </modulesynopsis>
-